package zx.lrn.notes.basic_grammer.interfaces_proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.util.Objects;

/**
 * @ClassName: ProxyLogic
 * @Description: 承载代理类的逻辑代码的类，实现了InvocationHandler
 * 关于JAVA代理的说明：
 * 1、所有的代理类都继承自Proxy类
 * 2、代理类没有名字，虚拟机中的Proxy类将生成名为$Proxy开头的类名
 * 3、凡是由同一个类加载器和同一组被代理接口的代理类只有一个
 * @Author: zhaoxuan
 * @Date: 2020/3/2 22:35
 **/
public class ProxyLogic implements InvocationHandler {

    private Object beProxy;

    public ProxyLogic(Object beProxy) {
        this.beProxy = beProxy;
    }

    /**
     * 这个代理类主要是为了代理Comparable接口，在执行比较前打印了参与比较的参数和方法名
     * @param proxy
     * @param method
     * @param args
     * @return
     * @throws Throwable
     */
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println(args[0] + method.getName() + beProxy);
        return method.invoke(beProxy, args);
    }
}
